package cn.fanyc.action.blockchain.fbc.contract.api;

import org.json.JSONObject;

import java.nio.charset.StandardCharsets;
import java.util.Arrays;

import static java.nio.charset.StandardCharsets.UTF_8;

/**
 * 上链数据实体对象
 *
 * @author Fanyc
 * @date 2020-10-19 16:21
 */
public class State {

    /**
     * 数据存储在链上的Key
     */
    protected String key;

    /**
     * 获取key
     *
     * @return 返回key
     */
    public String getKey() {
        return key;
    }

    /**
     * 序列化
     *
     * @return 序列化byte数组
     */
    public byte[] serialize() {
        String json = new JSONObject(this).toString();
        System.out.println("state serialize: " + json);
        return json.getBytes(StandardCharsets.UTF_8);
    }

    /**
     * 多个组成部分组合成唯一Key
     *
     * @param keyParts key部件
     * @return 唯一Key
     */
    public static String makeKey(String[] keyParts) {
        return String.join(":", keyParts);
    }

    /**
     * 拆分唯一Ke到多个组成部分
     *
     * @param key 唯一Key
     * @return 多个组成部分
     */
    public static String[] splitKey(String key) {
        System.out.println("state splitting key: " + key);
        String[] split = key.split(":");
        System.out.println("state splitting key: " + key + " = " + Arrays.asList(split));
        return split;
    }
}
